首页 > 试题广场 >

将升序数组转化为平衡二叉搜索树

[编程题]将升序数组转化为平衡二叉搜索树
  • 热度指数:32617 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个升序排序的数组,将其转化为平衡二叉搜索树(BST).

平衡二叉搜索树指树上每个节点 node 都满足左子树中所有节点的的值都小于 node 的值,右子树中所有节点的值都大于 node 的值,并且左右子树的节点数量之差不大于1

数据范围:,数组中每个值满足
进阶:空间复杂度 ,时间复杂度

例如当输入的升序数组为[-1,0,1,2]时,转化后的平衡二叉搜索树(BST)可以为{1,0,2,-1},如下图所示:
或为{0,-1,1,#,#,#,2},如下图所示:
返回任意一种即可。
示例1

输入

[-1,0,1,2]

输出

{1,0,2,-1}
示例2

输入

[]

输出

{}

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */

/**
  * 
  * @param num int整型一维数组 
  * @return TreeNode类
  */
function sortedArrayToBST( num ) {
    // write code here
    let numLen = num.length;
    if (numLen == 0) return null;
    let mid = parseInt(numLen/2);  
    let root = new TreeNode(num[mid]);
    let left1 = root, left2 = root, right1 = root, right2 = root;
    let left = mid - 1, right = mid + 1;
    while(left >= 0){
      left2 = new TreeNode(num[left]);
      left1.left = left2;
      left1 = left2;
      left--;
    }
    while(right <= numLen - 1){
      right2 = new TreeNode(num[right]);
      right1.right = right2;
      right1 = right2;
      right++;
    }
    return root;
}
module.exports = {
    sortedArrayToBST : sortedArrayToBST
};

发表于 2023-02-13 09:49:53 回复(0)

问题信息

难度:
1条回答 21450浏览

热门推荐

通过挑战的用户

查看代码